/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * Permission configuration in Topic & Group dimension.
 * @class
 */
class DetailedRolePerm extends  AbstractModel {
    constructor(){
        super();

        /**
         * Resources corresponding to permissions.
Specifies the topic name, which can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the api [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
Specifies the consumer group name, which can be obtained from the api response of DescribeConsumerGroupList (https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.Resource = null;

        /**
         * Whether to enable production permission
         * @type {boolean || null}
         */
        this.PermWrite = null;

        /**
         * Whether to enable consumption permission
         * @type {boolean || null}
         */
        this.PermRead = null;

        /**
         * Authorize resource type (Topic: theme; Group: consumption Group).
         * @type {string || null}
         */
        this.ResourceType = null;

        /**
         * Resource remark.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Resource = 'Resource' in params ? params.Resource : null;
        this.PermWrite = 'PermWrite' in params ? params.PermWrite : null;
        this.PermRead = 'PermRead' in params ? params.PermRead : null;
        this.ResourceType = 'ResourceType' in params ? params.ResourceType : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * DescribeProductSKUs request structure.
 * @class
 */
class DescribeProductSKUsRequest extends  AbstractModel {
    constructor(){
        super();

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

    }
}

/**
 * ResetConsumerGroupOffset response structure.
 * @class
 */
class ResetConsumerGroupOffsetResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSmoothMigrationTaskList request structure.
 * @class
 */
class DescribeSmoothMigrationTaskListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Product sales information
 * @class
 */
class ProductSKU extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the product type.
Trial version.
BASIC version.
PRO, professional edition.
PLATINUM edition.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Specification code
         * @type {string || null}
         */
        this.SkuCode = null;

        /**
         * TPS limit
         * @type {number || null}
         */
        this.TpsLimit = null;

        /**
         * Elastic TPS upper limit
         * @type {number || null}
         */
        this.ScaledTpsLimit = null;

        /**
         * Default maximum number of topics.
         * @type {number || null}
         */
        this.TopicNumLimit = null;

        /**
         * Maximum number of consumer groups
         * @type {number || null}
         */
        this.GroupNumLimit = null;

        /**
         * Default message retention time, in hours
         * @type {number || null}
         */
        this.DefaultRetention = null;

        /**
         * Adjustable maximum message retention time, in hours
         * @type {number || null}
         */
        this.RetentionUpperLimit = null;

        /**
         * Adjustable minimum message retention time, in hours
         * @type {number || null}
         */
        this.RetentionLowerLimit = null;

        /**
         * Maximum delayed message duration, in hours
         * @type {number || null}
         */
        this.MaxMessageDelay = null;

        /**
         * Whether it is purchasable
         * @type {boolean || null}
         */
        this.OnSale = null;

        /**
         * Billing item information
         * @type {Array.<PriceTag> || null}
         */
        this.PriceTags = null;

        /**
         * Default maximum number of topics.
         * @type {number || null}
         */
        this.TopicNumUpperLimit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.SkuCode = 'SkuCode' in params ? params.SkuCode : null;
        this.TpsLimit = 'TpsLimit' in params ? params.TpsLimit : null;
        this.ScaledTpsLimit = 'ScaledTpsLimit' in params ? params.ScaledTpsLimit : null;
        this.TopicNumLimit = 'TopicNumLimit' in params ? params.TopicNumLimit : null;
        this.GroupNumLimit = 'GroupNumLimit' in params ? params.GroupNumLimit : null;
        this.DefaultRetention = 'DefaultRetention' in params ? params.DefaultRetention : null;
        this.RetentionUpperLimit = 'RetentionUpperLimit' in params ? params.RetentionUpperLimit : null;
        this.RetentionLowerLimit = 'RetentionLowerLimit' in params ? params.RetentionLowerLimit : null;
        this.MaxMessageDelay = 'MaxMessageDelay' in params ? params.MaxMessageDelay : null;
        this.OnSale = 'OnSale' in params ? params.OnSale : null;

        if (params.PriceTags) {
            this.PriceTags = new Array();
            for (let z in params.PriceTags) {
                let obj = new PriceTag();
                obj.deserialize(params.PriceTags[z]);
                this.PriceTags.push(obj);
            }
        }
        this.TopicNumUpperLimit = 'TopicNumUpperLimit' in params ? params.TopicNumUpperLimit : null;

    }
}

/**
 * DescribeRoleList response structure.
 * @class
 */
class DescribeRoleListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Role information list
         * @type {Array.<RoleItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new RoleItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateInstance response structure.
 * @class
 */
class CreateInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerClient response structure.
 * @class
 */
class DescribeConsumerClientResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Client details

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ConsumerClient || null}
         */
        this.Client = null;

        /**
         * Topic consumption information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<TopicConsumeStats> || null}
         */
        this.TopicList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Client) {
            let obj = new ConsumerClient();
            obj.deserialize(params.Client)
            this.Client = obj;
        }

        if (params.TopicList) {
            this.TopicList = new Array();
            for (let z in params.TopicList) {
                let obj = new TopicConsumeStats();
                obj.deserialize(params.TopicList[z]);
                this.TopicList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMessageList request structure.
 * @class
 */
class DescribeMessageListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Start time for querying messages. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.StartTime = null;

        /**
         * End time for querying messages. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.EndTime = null;

        /**
         * Query identifier. For the first query, input a null string. If the query results involve pagination, use the TaskRequestId value in the previous request response as the value of this input parameter for requesting data on the next page.
         * @type {string || null}
         */
        this.TaskRequestId = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Message ID. It can be obtained from [MessageItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MessageItem) returned by the API [DescribeMessageList](https://www.tencentcloud.comom/document/api/1493/114593?from_cn_redirect=1) or from the workload logs.
         * @type {string || null}
         */
        this.MsgId = null;

        /**
         * Message key. It can be obtained from [MessageItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MessageItem) returned by the API [DescribeMessageList](https://www.tencentcloud.comom/document/api/1493/114593?from_cn_redirect=1) or from workload logs.
         * @type {string || null}
         */
        this.MsgKey = null;

        /**
         * Query the last N messages. The value of N cannot exceed 1024. By default, -1 indicates other query conditions.
         * @type {number || null}
         */
        this.RecentMessageNum = null;

        /**
         * Whether to query dead letter messages. Default value: false.
         * @type {boolean || null}
         */
        this.QueryDeadLetterMessage = null;

        /**
         * Message tag. It can be obtained from [MessageItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MessageItem) returned by the API [DescribeMessageList](https://www.tencentcloud.comom/document/api/1493/114593?from_cn_redirect=1) or from workload logs.
         * @type {string || null}
         */
        this.Tag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.StartTime = 'StartTime' in params ? params.StartTime : null;
        this.EndTime = 'EndTime' in params ? params.EndTime : null;
        this.TaskRequestId = 'TaskRequestId' in params ? params.TaskRequestId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.MsgId = 'MsgId' in params ? params.MsgId : null;
        this.MsgKey = 'MsgKey' in params ? params.MsgKey : null;
        this.RecentMessageNum = 'RecentMessageNum' in params ? params.RecentMessageNum : null;
        this.QueryDeadLetterMessage = 'QueryDeadLetterMessage' in params ? params.QueryDeadLetterMessage : null;
        this.Tag = 'Tag' in params ? params.Tag : null;

    }
}

/**
 * ModifyInstance request structure.
 * @class
 */
class ModifyInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name. It cannot be left blank. It can contain 3 to 64 characters consisting of only digits, letters, hyphens (-), and underscores (_).
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Remarks. Up to 128 characters are allowed.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Message sending and receiving ratio
         * @type {number || null}
         */
        this.SendReceiveRatio = null;

        /**
         * Product specification. It can be obtained from the output parameters of [ProductSKU](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ProductSKU) of the API [DescribeProductSKUs](https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1).
         * @type {string || null}
         */
        this.SkuCode = null;

        /**
         * Message retention time (unit: hr). value range refers to the ProductSKU response parameters structure in the DescribeProductSKUs api (https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1).

-Default value: DefaultRetention parameter.
-Minimum value: specifies the RetentionLowerLimit parameter.
-Specifies the maximum value of the RetentionUpperLimit parameter.
         * @type {number || null}
         */
        this.MessageRetention = null;

        /**
         * Whether to enable elastic TPS.
         * @type {boolean || null}
         */
        this.ScaledTpsEnabled = null;

        /**
         * Whether ACL is enabled.
         * @type {boolean || null}
         */
        this.AclEnabled = null;

        /**
         * The maximum number of topics that can be created. value ranges from...to... refer to the ProductSKU output parameter in the DescribeProductSKUs api (https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1) (https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ProductSKU).

-Minimum value and default value: TopicNumLimit parameter.
-Maximum value of TopicNumUpperLimit parameter.
         * @type {number || null}
         */
        this.MaxTopicNum = null;

        /**
         * Number of topics not included in the free quota. For the free quota, see the TopicNumLimit parameter in the output parameters of [ProductSKU](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ProductSKU) of the API [DescribeProductSKUs](https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1).
         * @type {string || null}
         */
        this.ExtraTopicNum = null;

        /**
         * Whether to enable deletion protection
         * @type {boolean || null}
         */
        this.EnableDeletionProtection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.SendReceiveRatio = 'SendReceiveRatio' in params ? params.SendReceiveRatio : null;
        this.SkuCode = 'SkuCode' in params ? params.SkuCode : null;
        this.MessageRetention = 'MessageRetention' in params ? params.MessageRetention : null;
        this.ScaledTpsEnabled = 'ScaledTpsEnabled' in params ? params.ScaledTpsEnabled : null;
        this.AclEnabled = 'AclEnabled' in params ? params.AclEnabled : null;
        this.MaxTopicNum = 'MaxTopicNum' in params ? params.MaxTopicNum : null;
        this.ExtraTopicNum = 'ExtraTopicNum' in params ? params.ExtraTopicNum : null;
        this.EnableDeletionProtection = 'EnableDeletionProtection' in params ? params.EnableDeletionProtection : null;

    }
}

/**
 * Instance information on the instance list page
 * @class
 */
class FusionInstanceItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance version.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Instance type.
Trial version.
BASIC version.
PRO, professional edition.
PLATINUM edition.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Instance status.
RUNNING. specifies the running status.
MAINTAINING.
ABNORMAL.
OVERDUE. specifies the state of arrears.
`DESTROYED`: `deleted`.
CREATING.
MODIFYING.
CREATE_FAILURE. specifies that the creation failed.
MODIFY_FAILURE. indicates a configuration adjustment failure.
Valid values: DELETING. indicates that the resource is being deleted.
         * @type {string || null}
         */
        this.InstanceStatus = null;

        /**
         * Maximum number of instance topics
         * @type {number || null}
         */
        this.TopicNumLimit = null;

        /**
         * Maximum number of instance consumer groups
         * @type {number || null}
         */
        this.GroupNumLimit = null;

        /**
         * Billing mode. valid enumeration values are as follows:.

-POSTPAID: pay-as-you-go.

- PREPAID: monthly subscription.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Expiration time. **It is a Unix timestamp (ms).**
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExpiryTime = null;

        /**
         * Remarks

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Number of topics
         * @type {number || null}
         */
        this.TopicNum = null;

        /**
         * Number of consumer groups
         * @type {number || null}
         */
        this.GroupNum = null;

        /**
         * Tag list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

        /**
         * Specifies the product specification.
         * @type {string || null}
         */
        this.SkuCode = null;

        /**
         * TPS throttle value

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TpsLimit = null;

        /**
         * Elastic TPS throttle value
         * @type {number || null}
         */
        this.ScaledTpsLimit = null;

        /**
         * Message retention time, in hours
         * @type {number || null}
         */
        this.MessageRetention = null;

        /**
         * Maximum delayed message duration, in hours
         * @type {number || null}
         */
        this.MaxMessageDelay = null;

        /**
         * Specifies whether the prepaid cluster is automatically renewed. valid values are as follows:.

- 0: no automatic renewal.
- 1: specifies automatic renewal.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Data unique to version 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {InstanceItemExtraInfo || null}
         */
        this.InstanceItemExtraInfo = null;

        /**
         * Expected termination time. **It is a Unix timestamp (ms).**
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DestroyTime = null;

        /**
         * AZ list. See [ZoneInfo](https://www.tencentcloud.comom/document/api/1596/77932?from_cn_redirect=1#ZoneInfo) returned by the API [DescribeZones](https://www.tencentcloud.comom/document/product/1596/77929?from_cn_redirect=1) in Data Type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * Whether to enable deletion protection
         * @type {boolean || null}
         */
        this.EnableDeletionProtection = null;

        /**
         * Instance creation time
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.CreateTime = null;

        /**
         * Elastic TPS switch.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ScaledTpsEnabled = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;
        this.TopicNumLimit = 'TopicNumLimit' in params ? params.TopicNumLimit : null;
        this.GroupNumLimit = 'GroupNumLimit' in params ? params.GroupNumLimit : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ExpiryTime = 'ExpiryTime' in params ? params.ExpiryTime : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.TopicNum = 'TopicNum' in params ? params.TopicNum : null;
        this.GroupNum = 'GroupNum' in params ? params.GroupNum : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }
        this.SkuCode = 'SkuCode' in params ? params.SkuCode : null;
        this.TpsLimit = 'TpsLimit' in params ? params.TpsLimit : null;
        this.ScaledTpsLimit = 'ScaledTpsLimit' in params ? params.ScaledTpsLimit : null;
        this.MessageRetention = 'MessageRetention' in params ? params.MessageRetention : null;
        this.MaxMessageDelay = 'MaxMessageDelay' in params ? params.MaxMessageDelay : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

        if (params.InstanceItemExtraInfo) {
            let obj = new InstanceItemExtraInfo();
            obj.deserialize(params.InstanceItemExtraInfo)
            this.InstanceItemExtraInfo = obj;
        }
        this.DestroyTime = 'DestroyTime' in params ? params.DestroyTime : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.EnableDeletionProtection = 'EnableDeletionProtection' in params ? params.EnableDeletionProtection : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;
        this.ScaledTpsEnabled = 'ScaledTpsEnabled' in params ? params.ScaledTpsEnabled : null;

    }
}

/**
 * Unified list display for 4.x clusters and 5.0 clusters shows the 4.x special data carrying interface.
 * @class
 */
class InstanceItemExtraInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether it is a vip.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsVip = null;

        /**
         * Specifies the dedicated cluster status of version 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.VipInstanceStatus = null;

        /**
         * Specifies the peak bandwidth of the dedicated cluster.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxBandWidth = null;

        /**
         * Exclusive cluster specification.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SpecName = null;

        /**
         * Specifies the quantity of exclusive cluster nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NodeCount = null;

        /**
         * Specifies the maximum storage of the dedicated cluster.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxStorage = null;

        /**
         * Specifies the maximum retention time of the dedicated cluster. the unit is hour.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxRetention = null;

        /**
         * Special project cluster maximum retention time, unit: hr.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MinRetention = null;

        /**
         * Status of 4.0 shared cluster.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.InstanceStatus = null;

        /**
         * Whether it is frozen.
         * @type {boolean || null}
         */
        this.IsFrozen = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.IsVip = 'IsVip' in params ? params.IsVip : null;
        this.VipInstanceStatus = 'VipInstanceStatus' in params ? params.VipInstanceStatus : null;
        this.MaxBandWidth = 'MaxBandWidth' in params ? params.MaxBandWidth : null;
        this.SpecName = 'SpecName' in params ? params.SpecName : null;
        this.NodeCount = 'NodeCount' in params ? params.NodeCount : null;
        this.MaxStorage = 'MaxStorage' in params ? params.MaxStorage : null;
        this.MaxRetention = 'MaxRetention' in params ? params.MaxRetention : null;
        this.MinRetention = 'MinRetention' in params ? params.MinRetention : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;
        this.IsFrozen = 'IsFrozen' in params ? params.IsFrozen : null;

    }
}

/**
 * DescribeConsumerGroup response structure.
 * @class
 */
class DescribeConsumerGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of online consumers.
         * @type {number || null}
         */
        this.ConsumerNum = null;

        /**
         * TPS
         * @type {number || null}
         */
        this.Tps = null;

        /**
         * Specifies the number of accumulated messages.
         * @type {number || null}
         */
        this.ConsumerLag = null;

        /**
         * Consumption type. valid values as follows:.

-PULL: specifies the pull consumption type.
-PUSH: specifies the push consumption type.
-POP: specifies the pop consumption type.
         * @type {string || null}
         */
        this.ConsumeType = null;

        /**
         * Creation time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.CreatedTime = null;

        /**
         * Specifies whether to use ordered delivery. valid values: true.
Concurrent delivery: false.
         * @type {boolean || null}
         */
        this.ConsumeMessageOrderly = null;

        /**
         * Whether to enable consumption.
         * @type {boolean || null}
         */
        this.ConsumeEnable = null;

        /**
         * Maximum number of retries.
         * @type {number || null}
         */
        this.MaxRetryTimes = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Specifies the consumption mode.
BROADCASTING.
CLUSTERING cluster mode.
         * @type {string || null}
         */
        this.MessageModel = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConsumerNum = 'ConsumerNum' in params ? params.ConsumerNum : null;
        this.Tps = 'Tps' in params ? params.Tps : null;
        this.ConsumerLag = 'ConsumerLag' in params ? params.ConsumerLag : null;
        this.ConsumeType = 'ConsumeType' in params ? params.ConsumeType : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.ConsumeMessageOrderly = 'ConsumeMessageOrderly' in params ? params.ConsumeMessageOrderly : null;
        this.ConsumeEnable = 'ConsumeEnable' in params ? params.ConsumeEnable : null;
        this.MaxRetryTimes = 'MaxRetryTimes' in params ? params.MaxRetryTimes : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.MessageModel = 'MessageModel' in params ? params.MessageModel : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteTopic request structure.
 * @class
 */
class DeleteTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;

    }
}

/**
 * DescribeSmoothMigrationTaskList response structure.
 * @class
 */
class DescribeSmoothMigrationTaskListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Task list.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<SmoothMigrationTaskItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new SmoothMigrationTaskItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMigrationTaskList response structure.
 * @class
 */
class DescribeMigrationTaskListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Migration Task List
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MigrationTaskItem> || null}
         */
        this.Tasks = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Tasks) {
            this.Tasks = new Array();
            for (let z in params.Tasks) {
                let obj = new MigrationTaskItem();
                obj.deserialize(params.Tasks[z]);
                this.Tasks.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * VPC information.
 * @class
 */
class VpcInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * VPC ID
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Subnet ID.
         * @type {string || null}
         */
        this.SubnetId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;

    }
}

/**
 * DescribeRoleList request structure.
 * @class
 */
class DescribeRoleListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeMigratingTopicStats response structure.
 * @class
 */
class DescribeMigratingTopicStatsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of consumers in the source cluster.
         * @type {number || null}
         */
        this.SourceClusterConsumerCount = null;

        /**
         * Number of consumers in the target cluster.
         * @type {number || null}
         */
        this.TargetClusterConsumerCount = null;

        /**
         * Source cluster consumer group list.
         * @type {Array.<string> || null}
         */
        this.SourceClusterConsumerGroups = null;

        /**
         * Target cluster consumer group list.
         * @type {Array.<string> || null}
         */
        this.TargetClusterConsumerGroups = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SourceClusterConsumerCount = 'SourceClusterConsumerCount' in params ? params.SourceClusterConsumerCount : null;
        this.TargetClusterConsumerCount = 'TargetClusterConsumerCount' in params ? params.TargetClusterConsumerCount : null;
        this.SourceClusterConsumerGroups = 'SourceClusterConsumerGroups' in params ? params.SourceClusterConsumerGroups : null;
        this.TargetClusterConsumerGroups = 'TargetClusterConsumerGroups' in params ? params.TargetClusterConsumerGroups : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerLag request structure.
 * @class
 */
class DescribeConsumerLagRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Namespace. It is required for 4.x clusters. The namespace can be obtained from [RocketMQNamespace](https://www.tencentcloud.comom/document/api/1179/46089?from_cn_redirect=1#RocketMQNamespace) returned by the API [DescribeRocketMQNamespaces](https://www.tencentcloud.comom/document/api/1179/63419?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Namespace = null;

        /**
         * Subscribed topic. If it is not left blank, query heaped messages of consumer groups subscribing to the topic. The topic can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.SubscribeTopic = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;
        this.SubscribeTopic = 'SubscribeTopic' in params ? params.SubscribeTopic : null;

    }
}

/**
 * DescribeMigratingGroupStats request structure.
 * @class
 */
class DescribeMigratingGroupStatsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Specifies the consumer group name. it can be obtained from [SourceClusterGroupConfig](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SourceClusterGroupConfig) returned by the api [DescribeSourceClusterGroupList](https://www.tencentcloud.comom/document/api/1493/118006?from_cn_redirect=1) or in the console.

         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Namespace. it is valid only when migrated to 4.x clusters. the namespace can be obtained from [SourceClusterGroupConfig](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SourceClusterGroupConfig) returned by the api [DescribeSourceClusterGroupList](https://www.tencentcloud.comom/document/api/1493/118006?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Namespace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;

    }
}

/**
 * Tag data
 * @class
 */
class Tag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TagValue = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValue = 'TagValue' in params ? params.TagValue : null;

    }
}

/**
 * DescribeSourceClusterGroupList response structure.
 * @class
 */
class DescribeSourceClusterGroupListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * List of consumption group configurations.
         * @type {Array.<SourceClusterGroupConfig> || null}
         */
        this.Groups = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Groups) {
            this.Groups = new Array();
            for (let z in params.Groups) {
                let obj = new SourceClusterGroupConfig();
                obj.deserialize(params.Groups[z]);
                this.Groups.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMessageList response structure.
 * @class
 */
class DescribeMessageListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Message record list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MessageItem> || null}
         */
        this.Data = null;

        /**
         * One-time query ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskRequestId = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new MessageItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.TaskRequestId = 'TaskRequestId' in params ? params.TaskRequestId : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteSmoothMigrationTask request structure.
 * @class
 */
class DeleteSmoothMigrationTaskRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;

    }
}

/**
 * DescribeInstanceList response structure.
 * @class
 */
class DescribeInstanceListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Instance list
         * @type {Array.<InstanceItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new InstanceItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerClientList response structure.
 * @class
 */
class DescribeConsumerClientListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Consumer client
         * @type {Array.<ConsumerClient> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new ConsumerClient();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstance response structure.
 * @class
 */
class ModifyInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateConsumerGroup request structure.
 * @class
 */
class CreateConsumerGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Maximum number of retries. Value range: 0 to 1000.
         * @type {number || null}
         */
        this.MaxRetryTimes = null;

        /**
         * Whether to enable consumption.
         * @type {boolean || null}
         */
        this.ConsumeEnable = null;

        /**
         * Specifies whether to use ordered delivery. valid values: true.
Concurrent delivery: false.
         * @type {boolean || null}
         */
        this.ConsumeMessageOrderly = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Remarks. Up to 128 characters are allowed.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Tag list
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.MaxRetryTimes = 'MaxRetryTimes' in params ? params.MaxRetryTimes : null;
        this.ConsumeEnable = 'ConsumeEnable' in params ? params.ConsumeEnable : null;
        this.ConsumeMessageOrderly = 'ConsumeMessageOrderly' in params ? params.ConsumeMessageOrderly : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }

    }
}

/**
 * Client subscription details, which are used to help determine clients with inconsistent subscription relationships.
 * @class
 */
class ClientSubscriptionInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Client ID
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * Client ip address.
         * @type {string || null}
         */
        this.ClientAddr = null;

        /**
         * Specifies the subscribed topic.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Subscription expression.
         * @type {string || null}
         */
        this.SubString = null;

        /**
         * Specifies the subscription method.
         * @type {string || null}
         */
        this.ExpressionType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.ClientAddr = 'ClientAddr' in params ? params.ClientAddr : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.SubString = 'SubString' in params ? params.SubString : null;
        this.ExpressionType = 'ExpressionType' in params ? params.ExpressionType : null;

    }
}

/**
 * ChangeMigratingTopicToNextStage response structure.
 * @class
 */
class ChangeMigratingTopicToNextStageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Result list of migration topic status modification.
         * @type {Array.<TopicStageChangeResult> || null}
         */
        this.Results = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Results) {
            this.Results = new Array();
            for (let z in params.Results) {
                let obj = new TopicStageChangeResult();
                obj.deserialize(params.Results[z]);
                this.Results.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeSourceClusterGroupList request structure.
 * @class
 */
class DescribeSourceClusterGroupListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the task ID. it can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the api [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeInstanceList request structure.
 * @class
 */
class DescribeInstanceListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Tag filter
         * @type {Array.<TagFilter> || null}
         */
        this.TagFilters = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.TagFilters) {
            this.TagFilters = new Array();
            for (let z in params.TagFilters) {
                let obj = new TagFilter();
                obj.deserialize(params.TagFilters[z]);
                this.TagFilters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeMigrationTaskList request structure.
 * @class
 */
class DescribeMigrationTaskListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Query criteria list
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Query start position
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Query result limit count
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * ModifyRole response structure.
 * @class
 */
class ModifyRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Result after modifying the status of the migration topic.
 * @class
 */
class TopicStageChangeResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Success status
         * @type {boolean || null}
         */
        this.Success = null;

        /**
         * Namespace. valid only for 4.x.
         * @type {string || null}
         */
        this.Namespace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Success = 'Success' in params ? params.Success : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;

    }
}

/**
 * DeleteInstance response structure.
 * @class
 */
class DeleteInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTopic response structure.
 * @class
 */
class DescribeTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Topic type.
UNSPECIFIED: not specified.
NORMAL: normal message.
FIFO: sequential message.
DELAY: delayed message.
TRANSACTION: transaction message.
         * @type {string || null}
         */
        this.TopicType = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Creation time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.CreatedTime = null;

        /**
         * Last write time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.LastUpdateTime = null;

        /**
         * Number of Subscriptions
         * @type {number || null}
         */
        this.SubscriptionCount = null;

        /**
         * Subscribe to the relationship list.
         * @type {Array.<SubscriptionData> || null}
         */
        this.SubscriptionData = null;

        /**
         * Message retention period. Unit: hour.
         * @type {number || null}
         */
        this.MsgTTL = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.TopicType = 'TopicType' in params ? params.TopicType : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.LastUpdateTime = 'LastUpdateTime' in params ? params.LastUpdateTime : null;
        this.SubscriptionCount = 'SubscriptionCount' in params ? params.SubscriptionCount : null;

        if (params.SubscriptionData) {
            this.SubscriptionData = new Array();
            for (let z in params.SubscriptionData) {
                let obj = new SubscriptionData();
                obj.deserialize(params.SubscriptionData[z]);
                this.SubscriptionData.push(obj);
            }
        }
        this.MsgTTL = 'MsgTTL' in params ? params.MsgTTL : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Hitless migration task.
 * @class
 */
class SmoothMigrationTaskItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Task name.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskName = null;

        /**
         * Source cluster name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourceClusterName = null;

        /**
         * Destination cluster instance ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the network connection type. 
PUBLIC network. 
Specifies the VPC virtual private cloud. 
OTHER.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConnectionType = null;

        /**
         * Source cluster NameServer address.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourceNameServer = null;

        /**
         * Task status.
Migration Configuration. specifies the migration Configuration.
SourceConnecting specifies connecting to source cluster.
MetaDataImport specifies metadata import.
EndpointSetup specifies the access point switchover.
Service migration is in progress.
Completed.
Cancelled: canceled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TaskStatus = null;

        /**
         * Specifies the target cluster instance version.
4 indicates version 4.x.
5 indicates version 5.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TaskName = 'TaskName' in params ? params.TaskName : null;
        this.SourceClusterName = 'SourceClusterName' in params ? params.SourceClusterName : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConnectionType = 'ConnectionType' in params ? params.ConnectionType : null;
        this.SourceNameServer = 'SourceNameServer' in params ? params.SourceNameServer : null;
        this.TaskStatus = 'TaskStatus' in params ? params.TaskStatus : null;
        this.InstanceVersion = 'InstanceVersion' in params ? params.InstanceVersion : null;

    }
}

/**
 * ModifyRole request structure.
 * @class
 */
class ModifyRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Role name. It can be obtained from [RoleItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#RoleItem) returned by the API [DescribeRoleList](https://www.tencentcloud.comom/document/api/1493/98862?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Role = null;

        /**
         * Whether to enable consumption.
         * @type {boolean || null}
         */
        this.PermRead = null;

        /**
         * Whether to enable production
         * @type {boolean || null}
         */
        this.PermWrite = null;

        /**
         * Specifies the types of permissions. the default is to authorize by Cluster (Cluster: at the Cluster level; TopicAndGroup: topic and consumer group dimension).
         * @type {string || null}
         */
        this.PermType = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Permission configuration in the topic/group dimension. It is required when the permission type parameter is set to TopicAndGroup.
         * @type {Array.<DetailedRolePerm> || null}
         */
        this.DetailedPerms = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Role = 'Role' in params ? params.Role : null;
        this.PermRead = 'PermRead' in params ? params.PermRead : null;
        this.PermWrite = 'PermWrite' in params ? params.PermWrite : null;
        this.PermType = 'PermType' in params ? params.PermType : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

        if (params.DetailedPerms) {
            this.DetailedPerms = new Array();
            for (let z in params.DetailedPerms) {
                let obj = new DetailedRolePerm();
                obj.deserialize(params.DetailedPerms[z]);
                this.DetailedPerms.push(obj);
            }
        }

    }
}

/**
 * DescribeFusionInstanceList response structure.
 * @class
 */
class DescribeFusionInstanceListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Instance list
         * @type {Array.<FusionInstanceItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new FusionInstanceItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResendDeadLetterMessage response structure.
 * @class
 */
class ResendDeadLetterMessageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the result of resending a message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ResendResult = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ResendResult = 'ResendResult' in params ? params.ResendResult : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMessage request structure.
 * @class
 */
class DescribeMessageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Message ID. It can be obtained from the API [DescribeMessageList](https://www.tencentcloud.comom/document/api/1493/114593?from_cn_redirect=1) or workload logs.
         * @type {string || null}
         */
        this.MsgId = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Whether the message is dead letter message. Default value: false.
         * @type {boolean || null}
         */
        this.QueryDeadLetterMessage = null;

        /**
         * Whether the message is delayed. Default value: false.
         * @type {boolean || null}
         */
        this.QueryDelayMessage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.MsgId = 'MsgId' in params ? params.MsgId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.QueryDeadLetterMessage = 'QueryDeadLetterMessage' in params ? params.QueryDeadLetterMessage : null;
        this.QueryDelayMessage = 'QueryDelayMessage' in params ? params.QueryDelayMessage : null;

    }
}

/**
 * DeleteRole request structure.
 * @class
 */
class DeleteRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Role name. It can be obtained from [RoleItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#RoleItem) returned by the API [DescribeRoleList](https://www.tencentcloud.comom/document/api/1493/98862?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Role = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Role = 'Role' in params ? params.Role : null;

    }
}

/**
 * Topic consumption progress
 * @class
 */
class TopicConsumeStats extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Topic type. valid values are as follows:.

-UNSPECIFIED: unspecified.
-NORMAL: standard message.
-FIFO: specifies sequential messaging.
-DELAY: specifies the delayed message.
-Specifies the TRANSACTION message.
         * @type {string || null}
         */
        this.TopicType = null;

        /**
         * Number of topic queues per node
         * @type {number || null}
         */
        this.QueueNum = null;

        /**
         * Consumption heap
         * @type {number || null}
         */
        this.ConsumerLag = null;

        /**
         * Subscription rule. `*` indicates subscription to all topics.
         * @type {string || null}
         */
        this.SubString = null;

        /**
         * Last consumption progress update time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.LastUpdateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.TopicType = 'TopicType' in params ? params.TopicType : null;
        this.QueueNum = 'QueueNum' in params ? params.QueueNum : null;
        this.ConsumerLag = 'ConsumerLag' in params ? params.ConsumerLag : null;
        this.SubString = 'SubString' in params ? params.SubString : null;
        this.LastUpdateTime = 'LastUpdateTime' in params ? params.LastUpdateTime : null;

    }
}

/**
 * DescribeMigratingTopicStats request structure.
 * @class
 */
class DescribeMigratingTopicStatsRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Topic name. It can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.

         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Namespace. This parameter is valid only for migration to a 4.x cluster. The namespace can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.
         * @type {string || null}
         */
        this.Namespace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;

    }
}

/**
 * DeleteConsumerGroup request structure.
 * @class
 */
class DeleteConsumerGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

    }
}

/**
 * CreateConsumerGroup response structure.
 * @class
 */
class CreateConsumerGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Cluster ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Specifies the consumer group name.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RollbackMigratingTopicStage request structure.
 * @class
 */
class RollbackMigratingTopicStageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Topic name. It can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.

         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Namespace. This parameter is valid only for migration to a 4.x cluster. The namespace can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.
         * @type {string || null}
         */
        this.Namespace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;

    }
}

/**
 * DescribeTopicListByGroup response structure.
 * @class
 */
class DescribeTopicListByGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Topic list.
         * @type {Array.<SubscriptionData> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new SubscriptionData();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMessageTrace response structure.
 * @class
 */
class DescribeMessageTraceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.ShowTopicName = null;

        /**
         * Track details

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MessageTraceItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ShowTopicName = 'ShowTopicName' in params ? params.ShowTopicName : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new MessageTraceItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DoHealthCheckOnMigratingTopic request structure.
 * @class
 */
class DoHealthCheckOnMigratingTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Topic name. It can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.

         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Whether to ignore the current check.
         * @type {boolean || null}
         */
        this.IgnoreCheck = null;

        /**
         * Namespace. This parameter is valid only for migration to a 4.x cluster. The namespace can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.
         * @type {string || null}
         */
        this.Namespace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.IgnoreCheck = 'IgnoreCheck' in params ? params.IgnoreCheck : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;

    }
}

/**
 * DescribeProducerList request structure.
 * @class
 */
class DescribeProducerListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

    }
}

/**
 * DescribeMigratingTopicList response structure.
 * @class
 */
class DescribeMigratingTopicListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Topic list.
         * @type {Array.<MigratingTopic> || null}
         */
        this.MigrateTopics = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.MigrateTopics) {
            this.MigrateTopics = new Array();
            for (let z in params.MigrateTopics) {
                let obj = new MigratingTopic();
                obj.deserialize(params.MigrateTopics[z]);
                this.MigrateTopics.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Instance information on the instance list page
 * @class
 */
class InstanceItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Instance version.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Instance type.
Trial version.
BASIC version.
PRO, professional edition.
PLATINUM edition.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Instance status.
RUNNING. specifies the running status.
MAINTAINING.
ABNORMAL.
OVERDUE. specifies the state of arrears.
`DESTROYED`: deleted.
CREATING.
MODIFYING.
CREATE_FAILURE. specifies that the creation failed.
MODIFY_FAILURE. indicates a configuration adjustment failure.
DELETING.
         * @type {string || null}
         */
        this.InstanceStatus = null;

        /**
         * Maximum number of instance topics
         * @type {number || null}
         */
        this.TopicNumLimit = null;

        /**
         * Maximum number of instance consumer groups
         * @type {number || null}
         */
        this.GroupNumLimit = null;

        /**
         * Billing mode. valid enumeration values are as follows:.

-POSTPAID: pay-as-you-go.

- PREPAID: monthly subscription.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Expiration timestamp. **It is a Unix timestamp (ms).**
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExpiryTime = null;

        /**
         * Remarks

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Number of topics
         * @type {number || null}
         */
        this.TopicNum = null;

        /**
         * Number of consumer groups
         * @type {number || null}
         */
        this.GroupNum = null;

        /**
         * Tag list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

        /**
         * Specifies the product specification.
         * @type {string || null}
         */
        this.SkuCode = null;

        /**
         * TPS throttle value
         * @type {number || null}
         */
        this.TpsLimit = null;

        /**
         * Elastic TPS throttle value
         * @type {number || null}
         */
        this.ScaledTpsLimit = null;

        /**
         * Message retention time, in hours
         * @type {number || null}
         */
        this.MessageRetention = null;

        /**
         * Maximum delayed message duration, in hours
         * @type {number || null}
         */
        this.MaxMessageDelay = null;

        /**
         * Whether automatic renewal is enabled. This parameter is valid only for prepaid clusters. 0: automatic renewal disabled; 1: automatic renewal enabled.
         * @type {number || null}
         */
        this.RenewFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;
        this.TopicNumLimit = 'TopicNumLimit' in params ? params.TopicNumLimit : null;
        this.GroupNumLimit = 'GroupNumLimit' in params ? params.GroupNumLimit : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ExpiryTime = 'ExpiryTime' in params ? params.ExpiryTime : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.TopicNum = 'TopicNum' in params ? params.TopicNum : null;
        this.GroupNum = 'GroupNum' in params ? params.GroupNum : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }
        this.SkuCode = 'SkuCode' in params ? params.SkuCode : null;
        this.TpsLimit = 'TpsLimit' in params ? params.TpsLimit : null;
        this.ScaledTpsLimit = 'ScaledTpsLimit' in params ? params.ScaledTpsLimit : null;
        this.MessageRetention = 'MessageRetention' in params ? params.MessageRetention : null;
        this.MaxMessageDelay = 'MaxMessageDelay' in params ? params.MaxMessageDelay : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;

    }
}

/**
 * DescribeTopic request structure.
 * @class
 */
class DescribeTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * DescribeMessageTrace request structure.
 * @class
 */
class DescribeMessageTraceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Message ID. It can be obtained from [MessageItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MessageItem) returned by the API [DescribeMessageList](https://www.tencentcloud.comom/document/api/1493/114593?from_cn_redirect=1) or from the workload logs.
         * @type {string || null}
         */
        this.MsgId = null;

        /**
         * Whether the message is dead letter message. Default value: false.
         * @type {boolean || null}
         */
        this.QueryDeadLetterMessage = null;

        /**
         * Whether the message is delayed. Default value: false.
         * @type {boolean || null}
         */
        this.QueryDelayMessage = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.MsgId = 'MsgId' in params ? params.MsgId : null;
        this.QueryDeadLetterMessage = 'QueryDeadLetterMessage' in params ? params.QueryDeadLetterMessage : null;
        this.QueryDelayMessage = 'QueryDelayMessage' in params ? params.QueryDelayMessage : null;

    }
}

/**
 * DeleteSmoothMigrationTask response structure.
 * @class
 */
class DeleteSmoothMigrationTaskResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeMigratingGroupStats response structure.
 * @class
 */
class DescribeMigratingGroupStatsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Source cluster consumer group accumulation.
         * @type {number || null}
         */
        this.SourceConsumeLag = null;

        /**
         * Target cluster consumer group accumulation.
         * @type {number || null}
         */
        this.TargetConsumeLag = null;

        /**
         * Source cluster connection client list.
         * @type {Array.<ConsumerClient> || null}
         */
        this.SourceConsumerClients = null;

        /**
         * Target cluster connection client list.
         * @type {Array.<ConsumerClient> || null}
         */
        this.TargetConsumerClients = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.SourceConsumeLag = 'SourceConsumeLag' in params ? params.SourceConsumeLag : null;
        this.TargetConsumeLag = 'TargetConsumeLag' in params ? params.TargetConsumeLag : null;

        if (params.SourceConsumerClients) {
            this.SourceConsumerClients = new Array();
            for (let z in params.SourceConsumerClients) {
                let obj = new ConsumerClient();
                obj.deserialize(params.SourceConsumerClients[z]);
                this.SourceConsumerClients.push(obj);
            }
        }

        if (params.TargetConsumerClients) {
            this.TargetConsumerClients = new Array();
            for (let z in params.TargetConsumerClients) {
                let obj = new ConsumerClient();
                obj.deserialize(params.TargetConsumerClients[z]);
                this.TargetConsumerClients.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveMigratingTopic request structure.
 * @class
 */
class RemoveMigratingTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Topic name. It can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.

         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Namespace. This parameter is valid only for migration to a 4.x cluster. The namespace can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.
         * @type {string || null}
         */
        this.Namespace = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;

    }
}

/**
 * DescribeMessage response structure.
 * @class
 */
class DescribeMessageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Message body.
         * @type {string || null}
         */
        this.Body = null;

        /**
         * Detailed parameters.
         * @type {string || null}
         */
        this.Properties = null;

        /**
         * Production time.
         * @type {string || null}
         */
        this.ProduceTime = null;

        /**
         * Message ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MessageId = null;

        /**
         * Producer address.
         * @type {string || null}
         */
        this.ProducerAddr = null;

        /**
         * List of message consumption situations.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<MessageTrackItem> || null}
         */
        this.MessageTracks = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.ShowTopicName = null;

        /**
         * Total number of items in the message consumption status list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MessageTracksCount = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Body = 'Body' in params ? params.Body : null;
        this.Properties = 'Properties' in params ? params.Properties : null;
        this.ProduceTime = 'ProduceTime' in params ? params.ProduceTime : null;
        this.MessageId = 'MessageId' in params ? params.MessageId : null;
        this.ProducerAddr = 'ProducerAddr' in params ? params.ProducerAddr : null;

        if (params.MessageTracks) {
            this.MessageTracks = new Array();
            for (let z in params.MessageTracks) {
                let obj = new MessageTrackItem();
                obj.deserialize(params.MessageTracks[z]);
                this.MessageTracks.push(obj);
            }
        }
        this.ShowTopicName = 'ShowTopicName' in params ? params.ShowTopicName : null;
        this.MessageTracksCount = 'MessageTracksCount' in params ? params.MessageTracksCount : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Whether there are scheduling tasks in each AZ during proxy scheduling.
 * @class
 */
class ZoneScheduledItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Availability zone ID.
         * @type {string || null}
         */
        this.ZoneId = null;

        /**
         * The value is true when there are scheduling tasks to be eliminated and no AZs for switchback; otherwise, it is false.
         * @type {boolean || null}
         */
        this.NodePermWipeFlag = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ZoneId = 'ZoneId' in params ? params.ZoneId : null;
        this.NodePermWipeFlag = 'NodePermWipeFlag' in params ? params.NodePermWipeFlag : null;

    }
}

/**
 * DescribeTopicList request structure.
 * @class
 */
class DescribeTopicListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Tag filter
         * @type {Array.<TagFilter> || null}
         */
        this.TagFilters = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Queries subscribed topics by consumer group.
         * @type {string || null}
         */
        this.FromGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

        if (params.TagFilters) {
            this.TagFilters = new Array();
            for (let z in params.TagFilters) {
                let obj = new TagFilter();
                obj.deserialize(params.TagFilters[z]);
                this.TagFilters.push(obj);
            }
        }

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.FromGroup = 'FromGroup' in params ? params.FromGroup : null;

    }
}

/**
 * ModifyConsumerGroup request structure.
 * @class
 */
class ModifyConsumerGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Whether to enable consumption.
         * @type {boolean || null}
         */
        this.ConsumeEnable = null;

        /**
         * Specifies whether to use ordered delivery. valid values: true.
Concurrent delivery: false.
         * @type {boolean || null}
         */
        this.ConsumeMessageOrderly = null;

        /**
         * Maximum number of retries. Value range: 0 to 1000.
         * @type {number || null}
         */
        this.MaxRetryTimes = null;

        /**
         * Remarks. Up to 128 characters are allowed.
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.ConsumeEnable = 'ConsumeEnable' in params ? params.ConsumeEnable : null;
        this.ConsumeMessageOrderly = 'ConsumeMessageOrderly' in params ? params.ConsumeMessageOrderly : null;
        this.MaxRetryTimes = 'MaxRetryTimes' in params ? params.MaxRetryTimes : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * DescribeConsumerGroup request structure.
 * @class
 */
class DescribeConsumerGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

    }
}

/**
 * Migration task information.
 * @class
 */
class MigrationTaskItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID
         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * 0 - not specified (existing).
Metadata import.
         * @type {number || null}
         */
        this.Type = null;

        /**
         * Total number of topics.
         * @type {number || null}
         */
        this.TopicNum = null;

        /**
         * Total Number of Consumer Groups
         * @type {number || null}
         */
        this.GroupNum = null;

        /**
         * Task status. 0: migrating; 1: migration successful; 2: migration completed, with only part of the data migrated.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Creation time.
         * @type {number || null}
         */
        this.CreateTime = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.TopicNum = 'TopicNum' in params ? params.TopicNum : null;
        this.GroupNum = 'GroupNum' in params ? params.GroupNum : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.CreateTime = 'CreateTime' in params ? params.CreateTime : null;

    }
}

/**
 * Topic information on the list
 * @class
 */
class TopicItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Topic type.
NORMAL: regular message.
FIFO: sequential messaging.
DELAY: delayed message.
TRANSACTION message.
         * @type {string || null}
         */
        this.TopicType = null;

        /**
         * Number of queues
         * @type {number || null}
         */
        this.QueueNum = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Cluster id of version 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClusterIdV4 = null;

        /**
         * Namespace of 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NamespaceV4 = null;

        /**
         * Topic name for version 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TopicV4 = null;

        /**
         * Complete namespace for 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullNamespaceV4 = null;

        /**
         * Message retention time.
         * @type {number || null}
         */
        this.MsgTTL = null;

        /**
         * List of bound tags
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.TopicType = 'TopicType' in params ? params.TopicType : null;
        this.QueueNum = 'QueueNum' in params ? params.QueueNum : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.ClusterIdV4 = 'ClusterIdV4' in params ? params.ClusterIdV4 : null;
        this.NamespaceV4 = 'NamespaceV4' in params ? params.NamespaceV4 : null;
        this.TopicV4 = 'TopicV4' in params ? params.TopicV4 : null;
        this.FullNamespaceV4 = 'FullNamespaceV4' in params ? params.FullNamespaceV4 : null;
        this.MsgTTL = 'MsgTTL' in params ? params.MsgTTL : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }

    }
}

/**
 * Topic and consumer group subscription relationship data
 * @class
 */
class SubscriptionData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance ID

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Topic type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TopicType = null;

        /**
         * Number of topic queues on a single node

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TopicQueueNum = null;

        /**
         * Specifies the consumer group name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Online status

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsOnline = null;

        /**
         * Consumption type. valid values as follows:.

-PULL: specifies the pull consumption type.
-PUSH: specifies the push consumption type.
-POP: specifies the pop consumption type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConsumeType = null;

        /**
         * Subscription rule.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubString = null;

        /**
         * Filter type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExpressionType = null;

        /**
         * Subscription consistency. enumerated as follows:.

-Subscription consistency.
-Subscription inconsistency.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Consistency = null;

        /**
         * Consumption heap

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ConsumerLag = null;

        /**
         * Last consumption progress update time. **It is a Unix timestamp (ms).**
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.LastUpdateTime = null;

        /**
         * Maximum number of retries.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MaxRetryTimes = null;

        /**
         * Whether it is sequential consumption

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ConsumeMessageOrderly = null;

        /**
         * Specifies the consumption mode. 
BROADCASTING mode.
CLUSTERING: cluster mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MessageModel = null;

        /**
         * List of clients with inconsistent subscriptions.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ClientSubscriptionInfo> || null}
         */
        this.ClientSubscriptionInfos = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.TopicType = 'TopicType' in params ? params.TopicType : null;
        this.TopicQueueNum = 'TopicQueueNum' in params ? params.TopicQueueNum : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.IsOnline = 'IsOnline' in params ? params.IsOnline : null;
        this.ConsumeType = 'ConsumeType' in params ? params.ConsumeType : null;
        this.SubString = 'SubString' in params ? params.SubString : null;
        this.ExpressionType = 'ExpressionType' in params ? params.ExpressionType : null;
        this.Consistency = 'Consistency' in params ? params.Consistency : null;
        this.ConsumerLag = 'ConsumerLag' in params ? params.ConsumerLag : null;
        this.LastUpdateTime = 'LastUpdateTime' in params ? params.LastUpdateTime : null;
        this.MaxRetryTimes = 'MaxRetryTimes' in params ? params.MaxRetryTimes : null;
        this.ConsumeMessageOrderly = 'ConsumeMessageOrderly' in params ? params.ConsumeMessageOrderly : null;
        this.MessageModel = 'MessageModel' in params ? params.MessageModel : null;

        if (params.ClientSubscriptionInfos) {
            this.ClientSubscriptionInfos = new Array();
            for (let z in params.ClientSubscriptionInfos) {
                let obj = new ClientSubscriptionInfo();
                obj.deserialize(params.ClientSubscriptionInfos[z]);
                this.ClientSubscriptionInfos.push(obj);
            }
        }

    }
}

/**
 * CreateInstance request structure.
 * @class
 */
class CreateInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance type. valid values are as follows:.

-EXPERIMENT: specifies the trial version.

- BASIC: BASIC edition.

-PRO edition.

-PLATINUM: platinum version.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Cluster name. values cannot be empty. 3-64 characters, only comprised of digits, letters, "-", and "_".
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Product specification. It can be obtained from the output parameters of [ProductSKU](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ProductSKU) of the API [DescribeProductSKUs](https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1).
         * @type {string || null}
         */
        this.SkuCode = null;

        /**
         * Specifies the VPC information bound to the cluster.
         * @type {Array.<VpcInfo> || null}
         */
        this.VpcList = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Tag list
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

        /**
         * Whether public network access is enabled. the default value of false means not enabled.
         * @type {boolean || null}
         */
        this.EnablePublic = null;

        /**
         * Whether the public network is billed by traffic. the default value is false, which indicates that the public network is not billed by traffic.
         * @type {boolean || null}
         */
        this.BillingFlow = null;

        /**
         * Public network bandwidth (unit: mbps). the default value is 0. if public network access is enabled, this field must be a positive integer above 0.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Public network access allowlist. if left blank, it means deny all IP access.
         * @type {Array.<IpRule> || null}
         */
        this.IpRules = null;

        /**
         * Message retention time (unit: hr). value range refers to the ProductSKU response parameters structure in the DescribeProductSKUs api (https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1).

-Default value: DefaultRetention parameter.
-Minimum value: specifies the RetentionLowerLimit parameter.
-Specifies the maximum value of the RetentionUpperLimit parameter.
         * @type {number || null}
         */
        this.MessageRetention = null;

        /**
         * Payment mode (0: postpaid; 1: prepaid). the default value is 0.
         * @type {number || null}
         */
        this.PayMode = null;

        /**
         * Whether the prepaid cluster is automatically renewed (0: no auto-renewal; 1: auto-renewal). default value: 0.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Specifies the purchase duration (unit: month) for a prepaid cluster. value range: 1–60. default value: 1.
         * @type {number || null}
         */
        this.TimeSpan = null;

        /**
         * Specifies the maximum number of topics that can be created. obtained from the ProductSKU response parameters structure in the DescribeProductSKUs api (https://www.tencentcloud.comom/document/api/1493/107676?from_cn_redirect=1) (https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ProductSKU).

-Default value and minimum value: specifies the TopicNumLimit parameter.
-Maximum value of TopicNumUpperLimit parameter.
         * @type {number || null}
         */
        this.MaxTopicNum = null;

        /**
         * Deployment AZ list. obtain from the [ZoneInfo](https://www.tencentcloud.comom/document/api/1596/77932?from_cn_redirect=1#ZoneInfo) data structure returned by the api [DescribeZones](https://www.tencentcloud.comom/document/product/1596/77929?from_cn_redirect=1).
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.SkuCode = 'SkuCode' in params ? params.SkuCode : null;

        if (params.VpcList) {
            this.VpcList = new Array();
            for (let z in params.VpcList) {
                let obj = new VpcInfo();
                obj.deserialize(params.VpcList[z]);
                this.VpcList.push(obj);
            }
        }
        this.Remark = 'Remark' in params ? params.Remark : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }
        this.EnablePublic = 'EnablePublic' in params ? params.EnablePublic : null;
        this.BillingFlow = 'BillingFlow' in params ? params.BillingFlow : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;

        if (params.IpRules) {
            this.IpRules = new Array();
            for (let z in params.IpRules) {
                let obj = new IpRule();
                obj.deserialize(params.IpRules[z]);
                this.IpRules.push(obj);
            }
        }
        this.MessageRetention = 'MessageRetention' in params ? params.MessageRetention : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.TimeSpan = 'TimeSpan' in params ? params.TimeSpan : null;
        this.MaxTopicNum = 'MaxTopicNum' in params ? params.MaxTopicNum : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;

    }
}

/**
 * Consumer client
 * @class
 */
class ConsumerClient extends  AbstractModel {
    constructor(){
        super();

        /**
         * Client ID
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * Client address.
         * @type {string || null}
         */
        this.ClientAddr = null;

        /**
         * Client SDK language
         * @type {string || null}
         */
        this.Language = null;

        /**
         * Client SDK version
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Client consumption heap

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ConsumerLag = null;

        /**
         * Consumer client type. valid values:.

-Specifies the grpc protocol.
-remoting protocol.
-http protocol.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ChannelProtocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.ClientAddr = 'ClientAddr' in params ? params.ClientAddr : null;
        this.Language = 'Language' in params ? params.Language : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.ConsumerLag = 'ConsumerLag' in params ? params.ConsumerLag : null;
        this.ChannelProtocol = 'ChannelProtocol' in params ? params.ChannelProtocol : null;

    }
}

/**
 * Message trace.
 * @class
 */
class MessageTraceItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Message handling phase. valid values are as follows:.

-Produces messages.

-Persists message storage.

-Consumes messages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Stage = null;

        /**
         * Track details

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Stage = 'Stage' in params ? params.Stage : null;
        this.Data = 'Data' in params ? params.Data : null;

    }
}

/**
 * DescribeConsumerClient request structure.
 * @class
 */
class DescribeConsumerClientRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Client ID. It can be obtained from the output parameters of [ConsumerClient](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumerClient) of the API [DescribeConsumerClientList](https://www.tencentcloud.comom/document/api/1493/120140?from_cn_redirect=1).
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ClientId = 'ClientId' in params ? params.ClientId : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

    }
}

/**
 * ModifyTopic response structure.
 * @class
 */
class ModifyTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerLag response structure.
 * @class
 */
class DescribeConsumerLagResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Number of heaped messages.
         * @type {number || null}
         */
        this.ConsumerLag = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConsumerLag = 'ConsumerLag' in params ? params.ConsumerLag : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ChangeMigratingTopicToNextStage request structure.
 * @class
 */
class ChangeMigratingTopicToNextStageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * List of topic names. topic name can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the api [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in data type.

         * @type {Array.<string> || null}
         */
        this.TopicNameList = null;

        /**
         * Namespace list. It is valid only for 4.x clusters and has a one-to-one relationship with TopicNameList. The list can be obtained from [MigratingTopic](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#MigratingTopic) returned by the API [DescribeMigratingTopicList](https://www.tencentcloud.comom/document/api/1493/118007?from_cn_redirect=1) in Data Type.
         * @type {Array.<string> || null}
         */
        this.NamespaceList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.TopicNameList = 'TopicNameList' in params ? params.TopicNameList : null;
        this.NamespaceList = 'NamespaceList' in params ? params.NamespaceList : null;

    }
}

/**
 * DeleteRole response structure.
 * @class
 */
class DeleteRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeTopicListByGroup request structure.
 * @class
 */
class DescribeTopicListByGroupRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * DescribeMigratingTopicList request structure.
 * @class
 */
class DescribeMigratingTopicListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Task ID. It can be obtained from [SmoothMigrationTaskItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SmoothMigrationTaskItem) returned by the API [DescribeSmoothMigrationTaskList](https://www.tencentcloud.comom/document/api/1493/119997?from_cn_redirect=1) or from the console.

         * @type {string || null}
         */
        this.TaskId = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TaskId = 'TaskId' in params ? params.TaskId : null;
        this.Limit = 'Limit' in params ? params.Limit : null;
        this.Offset = 'Offset' in params ? params.Offset : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

    }
}

/**
 * Query filter
 * @class
 */
class Filter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Filter condition parameter name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Filter criterion value
         * @type {Array.<string> || null}
         */
        this.Values = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Values = 'Values' in params ? params.Values : null;

    }
}

/**
 * ModifyTopic request structure.
 * @class
 */
class ModifyTopicRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Number of queues. Value range: 3 to 16.
         * @type {number || null}
         */
        this.QueueNum = null;

        /**
         * Remarks. Up to 128 characters are allowed.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Message retention period (unit: hour).
         * @type {number || null}
         */
        this.MsgTTL = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.QueueNum = 'QueueNum' in params ? params.QueueNum : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.MsgTTL = 'MsgTTL' in params ? params.MsgTTL : null;

    }
}

/**
 * DescribeInstance response structure.
 * @class
 */
class DescribeInstanceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Instance type.
Specifies the EXPERIMENT trial version.
BASIC version.
PRO edition.
PLATINUM. platinum version.
         * @type {string || null}
         */
        this.InstanceType = null;

        /**
         * Instance ID
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Instance name
         * @type {string || null}
         */
        this.InstanceName = null;

        /**
         * Number of topics
         * @type {number || null}
         */
        this.TopicNum = null;

        /**
         * Maximum number of topics per instance
         * @type {number || null}
         */
        this.TopicNumLimit = null;

        /**
         * Number of consumer groups
         * @type {number || null}
         */
        this.GroupNum = null;

        /**
         * Maximum number of consumer groups per instance
         * @type {number || null}
         */
        this.GroupNumLimit = null;

        /**
         * Message retention time, in hours
         * @type {number || null}
         */
        this.MessageRetention = null;

        /**
         * Maximum adjustable message retention time, in hours
         * @type {number || null}
         */
        this.RetentionUpperLimit = null;

        /**
         * Minimum adjustable message retention time, in hours
         * @type {number || null}
         */
        this.RetentionLowerLimit = null;

        /**
         * TPS throttle value
         * @type {number || null}
         */
        this.TpsLimit = null;

        /**
         * Elastic TPS throttle value
         * @type {number || null}
         */
        this.ScaledTpsLimit = null;

        /**
         * Maximum delayed message time, in hours
         * @type {number || null}
         */
        this.MaxMessageDelay = null;

        /**
         * Creation time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.CreatedTime = null;

        /**
         * Message sending and receiving ratio
         * @type {number || null}
         */
        this.SendReceiveRatio = null;

        /**
         * Tag.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Tag> || null}
         */
        this.TagList = null;

        /**
         * Access point list

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Endpoint> || null}
         */
        this.EndpointList = null;

        /**
         * Maximum number of topic queues
         * @type {number || null}
         */
        this.TopicQueueNumUpperLimit = null;

        /**
         * Minimum queue count for topic
         * @type {number || null}
         */
        this.TopicQueueNumLowerLimit = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Instance status. valid values are as follows:.

- RUNNING: RUNNING.
-ABNORMAL: indicates an abnormal status.
-OVERDUE: isolated.
-DESTROYED: specifies the terminated status.
-CREATING: creating.
-MODIFYING.
-CREATE_FAILURE: creation failed.
-MODIFY_FAILURE: configuration adjustment failure.
-DELETING: deleting.
         * @type {string || null}
         */
        this.InstanceStatus = null;

        /**
         * Instance specification.
         * @type {string || null}
         */
        this.SkuCode = null;

        /**
         * Billing mode. valid enumeration values are as follows:.

- POSTPAID: POSTPAID pay-as-you-go billing.
- PREPAID: PREPAID annual and monthly.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Whether to enable elastic TPS.
         * @type {boolean || null}
         */
        this.ScaledTpsEnabled = null;

        /**
         * Specifies whether the prepaid cluster is automatically renewed. valid values are as follows:.

- 0: no automatic renewal.
- 1: specifies automatic renewal.
         * @type {number || null}
         */
        this.RenewFlag = null;

        /**
         * Expiration time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.ExpiryTime = null;

        /**
         * Specifies the limit on the number of roles.
         * @type {number || null}
         */
        this.RoleNumLimit = null;

        /**
         * Whether ACL is enabled.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.AclEnabled = null;

        /**
         * Number of topics within the free quota.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TopicNumLowerLimit = null;

        /**
         * Maximum settable number of topics.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TopicNumUpperLimit = null;

        /**
         * AZ list. See [ZoneInfo](https://www.tencentcloud.comom/document/api/1596/77932?from_cn_redirect=1#ZoneInfo) returned by the API [DescribeZones](https://www.tencentcloud.comom/document/product/1596/77929?from_cn_redirect=1) in Data Type.
         * @type {Array.<number> || null}
         */
        this.ZoneIds = null;

        /**
         * Number of proxy nodes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NodeCount = null;

        /**
         * Proxy scheduling details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ZoneScheduledItem> || null}
         */
        this.ZoneScheduledList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceType = 'InstanceType' in params ? params.InstanceType : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.InstanceName = 'InstanceName' in params ? params.InstanceName : null;
        this.TopicNum = 'TopicNum' in params ? params.TopicNum : null;
        this.TopicNumLimit = 'TopicNumLimit' in params ? params.TopicNumLimit : null;
        this.GroupNum = 'GroupNum' in params ? params.GroupNum : null;
        this.GroupNumLimit = 'GroupNumLimit' in params ? params.GroupNumLimit : null;
        this.MessageRetention = 'MessageRetention' in params ? params.MessageRetention : null;
        this.RetentionUpperLimit = 'RetentionUpperLimit' in params ? params.RetentionUpperLimit : null;
        this.RetentionLowerLimit = 'RetentionLowerLimit' in params ? params.RetentionLowerLimit : null;
        this.TpsLimit = 'TpsLimit' in params ? params.TpsLimit : null;
        this.ScaledTpsLimit = 'ScaledTpsLimit' in params ? params.ScaledTpsLimit : null;
        this.MaxMessageDelay = 'MaxMessageDelay' in params ? params.MaxMessageDelay : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.SendReceiveRatio = 'SendReceiveRatio' in params ? params.SendReceiveRatio : null;

        if (params.TagList) {
            this.TagList = new Array();
            for (let z in params.TagList) {
                let obj = new Tag();
                obj.deserialize(params.TagList[z]);
                this.TagList.push(obj);
            }
        }

        if (params.EndpointList) {
            this.EndpointList = new Array();
            for (let z in params.EndpointList) {
                let obj = new Endpoint();
                obj.deserialize(params.EndpointList[z]);
                this.EndpointList.push(obj);
            }
        }
        this.TopicQueueNumUpperLimit = 'TopicQueueNumUpperLimit' in params ? params.TopicQueueNumUpperLimit : null;
        this.TopicQueueNumLowerLimit = 'TopicQueueNumLowerLimit' in params ? params.TopicQueueNumLowerLimit : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.InstanceStatus = 'InstanceStatus' in params ? params.InstanceStatus : null;
        this.SkuCode = 'SkuCode' in params ? params.SkuCode : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.ScaledTpsEnabled = 'ScaledTpsEnabled' in params ? params.ScaledTpsEnabled : null;
        this.RenewFlag = 'RenewFlag' in params ? params.RenewFlag : null;
        this.ExpiryTime = 'ExpiryTime' in params ? params.ExpiryTime : null;
        this.RoleNumLimit = 'RoleNumLimit' in params ? params.RoleNumLimit : null;
        this.AclEnabled = 'AclEnabled' in params ? params.AclEnabled : null;
        this.TopicNumLowerLimit = 'TopicNumLowerLimit' in params ? params.TopicNumLowerLimit : null;
        this.TopicNumUpperLimit = 'TopicNumUpperLimit' in params ? params.TopicNumUpperLimit : null;
        this.ZoneIds = 'ZoneIds' in params ? params.ZoneIds : null;
        this.NodeCount = 'NodeCount' in params ? params.NodeCount : null;

        if (params.ZoneScheduledList) {
            this.ZoneScheduledList = new Array();
            for (let z in params.ZoneScheduledList) {
                let obj = new ZoneScheduledItem();
                obj.deserialize(params.ZoneScheduledList[z]);
                this.ZoneScheduledList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyConsumerGroup response structure.
 * @class
 */
class ModifyConsumerGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteInstance request structure.
 * @class
 */
class DeleteInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * MessageTrack
 * @class
 */
class MessageTrackItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the consumer group name.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Consumption status. CONSUMED: Consumed CONSUMED_BUT_FILTERED: Filtered NOT_CONSUME: Not consumed ENTER_RETRY: Enter retry queue. ENTER_DLQ: Enter dead letter queue. UNKNOWN: Consumption status unknown
         * @type {string || null}
         */
        this.ConsumeStatus = null;

        /**
         * Track type
         * @type {string || null}
         */
        this.TrackType = null;

        /**
         * Exception information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExceptionDesc = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;
        this.ConsumeStatus = 'ConsumeStatus' in params ? params.ConsumeStatus : null;
        this.TrackType = 'TrackType' in params ? params.TrackType : null;
        this.ExceptionDesc = 'ExceptionDesc' in params ? params.ExceptionDesc : null;

    }
}

/**
 * DescribeProducerList response structure.
 * @class
 */
class DescribeProducerListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Producer information list.
         * @type {Array.<ProducerInfo> || null}
         */
        this.ProducerList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.ProducerList) {
            this.ProducerList = new Array();
            for (let z in params.ProducerList) {
                let obj = new ProducerInfo();
                obj.deserialize(params.ProducerList[z]);
                this.ProducerList.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ResendDeadLetterMessage request structure.
 * @class
 */
class ResendDeadLetterMessageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * List of dead letter message ids.
         * @type {Array.<string> || null}
         */
        this.MessageIds = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.MessageIds = 'MessageIds' in params ? params.MessageIds : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

    }
}

/**
 * RollbackMigratingTopicStage response structure.
 * @class
 */
class RollbackMigratingTopicStageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeFusionInstanceList request structure.
 * @class
 */
class DescribeFusionInstanceListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Tag filter
         * @type {Array.<TagFilter> || null}
         */
        this.TagFilters = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }

        if (params.TagFilters) {
            this.TagFilters = new Array();
            for (let z in params.TagFilters) {
                let obj = new TagFilter();
                obj.deserialize(params.TagFilters[z]);
                this.TagFilters.push(obj);
            }
        }

    }
}

/**
 * DoHealthCheckOnMigratingTopic response structure.
 * @class
 */
class DoHealthCheckOnMigratingTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether to Pass		
         * @type {boolean || null}
         */
        this.Passed = null;

        /**
         * Error information returned by health check.
NotChecked indicates the check is not executed. 
Unknown error. 
TopicNotImported. specifies the topic is not imported.
TopicNotExistsInSourceCluster specifies the topic does not exist in the source cluster. 
Topic does not exist in the target cluster. 
ConsumerConnectedOnTarget specifies whether consumer connections exist on the target cluster. 
SourceTopicHasNewMessagesIn5Minutes indicates that new messages were written to the source cluster topic in the last 5 minutes. 
TargetTopicHasNewMessagesIn5Minutes specifies whether new messages were written to the target cluster topic in the last 5 minutes. 
SourceTopicHasNoMessagesIn5Minutes specifies no new messages were written to the source cluster in the last 5 minutes. 
TargetTopicHasNoMessagesIn5Minutes specifies that no new messages were written to the source cluster in the last 5 minutes. 
Inconsistent number of subscription groups. 
SourceTopicHasUnconsumedMessages specifies that unconsumed messages exist in the source cluster topic.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Reason = null;

        /**
         * List of error information returned by health check.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.ReasonList = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Passed = 'Passed' in params ? params.Passed : null;
        this.Reason = 'Reason' in params ? params.Reason : null;
        this.ReasonList = 'ReasonList' in params ? params.ReasonList : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateRole response structure.
 * @class
 */
class CreateRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Role name.
         * @type {string || null}
         */
        this.Role = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Role = 'Role' in params ? params.Role : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceEndpoint request structure.
 * @class
 */
class ModifyInstanceEndpointRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Access point type.
PUBLIC network.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Public network bandwidth, in Mbps
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Public network security group information
         * @type {Array.<IpRule> || null}
         */
        this.IpRules = null;

        /**
         * Whether the public network is billed by traffic.
         * @type {boolean || null}
         */
        this.BillingFlow = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Type = 'Type' in params ? params.Type : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;

        if (params.IpRules) {
            this.IpRules = new Array();
            for (let z in params.IpRules) {
                let obj = new IpRule();
                obj.deserialize(params.IpRules[z]);
                this.IpRules.push(obj);
            }
        }
        this.BillingFlow = 'BillingFlow' in params ? params.BillingFlow : null;

    }
}

/**
 * Specifies the consumer group configuration information.
 * @class
 */
class SourceClusterGroupConfig extends  AbstractModel {
    constructor(){
        super();

        /**
         * Consumer group name. It can be obtained from [SourceClusterGroupConfig](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#SourceClusterGroupConfig) returned by the API [DescribeSourceClusterGroupList](https://www.tencentcloud.comom/document/api/1493/118006?from_cn_redirect=1).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Remarks

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Specifies whether it has been imported. it is unavailable when used as an input parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Imported = null;

        /**
         * Namespace, valid for 4.x clusters only.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Namespace = null;

        /**
         * Import status.
Unknown. specifies an unknown status.
Success.
Failure.
AlreadyExists. specifies the resource already exists.

Used as an output parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ImportStatus = null;

        /**
         * Namespace of 4.x. output usage.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NamespaceV4 = null;

        /**
         * Consumer group name for version 4.x. output usage.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GroupNameV4 = null;

        /**
         * Complete namespace for version 4.x. output usage.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullNamespaceV4 = null;

        /**
         * Specifies whether it is ordered delivery. valid value: 5.0.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ConsumeMessageOrderly = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.Imported = 'Imported' in params ? params.Imported : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;
        this.ImportStatus = 'ImportStatus' in params ? params.ImportStatus : null;
        this.NamespaceV4 = 'NamespaceV4' in params ? params.NamespaceV4 : null;
        this.GroupNameV4 = 'GroupNameV4' in params ? params.GroupNameV4 : null;
        this.FullNamespaceV4 = 'FullNamespaceV4' in params ? params.FullNamespaceV4 : null;
        this.ConsumeMessageOrderly = 'ConsumeMessageOrderly' in params ? params.ConsumeMessageOrderly : null;

    }
}

/**
 * DescribeTopicList response structure.
 * @class
 */
class DescribeTopicListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total query count
         * @type {number || null}
         */
        this.TotalCount = null;

        /**
         * Topic list.
         * @type {Array.<TopicItem> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TotalCount = 'TotalCount' in params ? params.TotalCount : null;

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new TopicItem();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeConsumerClientList request structure.
 * @class
 */
class DescribeConsumerClientListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

        /**
         * Filtering condition list. See the description of the API using this parameter for the usage method.
         * @type {Array.<Filter> || null}
         */
        this.Filters = null;

        /**
         * Starting position of the query. Default value: 0.
         * @type {number || null}
         */
        this.Offset = null;

        /**
         * Maximum number of queried results. Default value: 20.
         * @type {number || null}
         */
        this.Limit = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

        if (params.Filters) {
            this.Filters = new Array();
            for (let z in params.Filters) {
                let obj = new Filter();
                obj.deserialize(params.Filters[z]);
                this.Filters.push(obj);
            }
        }
        this.Offset = 'Offset' in params ? params.Offset : null;
        this.Limit = 'Limit' in params ? params.Limit : null;

    }
}

/**
 * Migrating topic.
 * @class
 */
class MigratingTopic extends  AbstractModel {
    constructor(){
        super();

        /**
         * Topic name
         * @type {string || null}
         */
        this.TopicName = null;

        /**
         * Migration status. 
S_RW_D_NA source cluster read/write.
S_RW_D_R specifies read and write permissions for the source cluster and read permissions for the target cluster.
S_RW_D_RW specifies read-write for the source cluster and read-write for the target cluster.
SRDRW specifies source cluster read and destination cluster read/write.
S_NA_D_RW specifies the read-write target cluster.
         * @type {string || null}
         */
        this.MigrationStatus = null;

        /**
         * Specifies whether the health check is completed.	
         * @type {boolean || null}
         */
        this.HealthCheckPassed = null;

        /**
         * Error information returned by the last health check is valid only when HealthCheckPassed is false. NotChecked: check not executed. Unknown: Unknown error. TopicNotImported: topic not imported. TopicNotExistsInSourceCluster: topic does not exist in the source cluster. TopicNotExistsInTargetCluster: topic does not exist in the target cluster. ConsumerConnectedOnTarget: consumer connections exist on the target cluster. SourceTopicHasNewMessagesIn5Minutes: new messages were written to the source cluster topic in the last 5 Minutes. TargetTopicHasNewMessagesIn5Minutes: new messages were written to the target cluster topic in the last 5 Minutes. SourceTopicHasNoMessagesIn5Minutes: no new messages were written to the source cluster in the last 5 Minutes. TargetTopicHasNoMessagesIn5Minutes: no new messages were written to the target cluster in the last 5 Minutes. ConsumerGroupCountNotMatch: inconsistent number of subscription groups. SourceTopicHasUnconsumedMessages: unconsumed messages exist in the source cluster topic.
         * @type {string || null}
         */
        this.HealthCheckError = null;

        /**
         * Namespace. specifies that it is only valid for 4.x clusters.
         * @type {string || null}
         */
        this.Namespace = null;

        /**
         * Namespace of 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.NamespaceV4 = null;

        /**
         * Topic name for version 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TopicNameV4 = null;

        /**
         * Complete namespace for 4.x.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FullNamespaceV4 = null;

        /**
         * Error list returned from the last health check.
         * @type {Array.<string> || null}
         */
        this.HealthCheckErrorList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TopicName = 'TopicName' in params ? params.TopicName : null;
        this.MigrationStatus = 'MigrationStatus' in params ? params.MigrationStatus : null;
        this.HealthCheckPassed = 'HealthCheckPassed' in params ? params.HealthCheckPassed : null;
        this.HealthCheckError = 'HealthCheckError' in params ? params.HealthCheckError : null;
        this.Namespace = 'Namespace' in params ? params.Namespace : null;
        this.NamespaceV4 = 'NamespaceV4' in params ? params.NamespaceV4 : null;
        this.TopicNameV4 = 'TopicNameV4' in params ? params.TopicNameV4 : null;
        this.FullNamespaceV4 = 'FullNamespaceV4' in params ? params.FullNamespaceV4 : null;
        this.HealthCheckErrorList = 'HealthCheckErrorList' in params ? params.HealthCheckErrorList : null;

    }
}

/**
 * CreateRole request structure.
 * @class
 */
class CreateRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Role name. It cannot be left blank. Only digits, uppercase and lowercase letters, and separators (_ -) are supported. The name cannot exceed 32 characters.
         * @type {string || null}
         */
        this.Role = null;

        /**
         * Whether to enable production permission
         * @type {boolean || null}
         */
        this.PermWrite = null;

        /**
         * Whether to enable consumption permission
         * @type {boolean || null}
         */
        this.PermRead = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Specifies the types of permissions. the default is to authorize by Cluster (Cluster: at the Cluster level; TopicAndGroup: topic and consumer group level).
         * @type {string || null}
         */
        this.PermType = null;

        /**
         * Permission configuration in the topic/group dimension. It is required when the permission type parameter is set to TopicAndGroup.
         * @type {Array.<DetailedRolePerm> || null}
         */
        this.DetailedPerms = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Role = 'Role' in params ? params.Role : null;
        this.PermWrite = 'PermWrite' in params ? params.PermWrite : null;
        this.PermRead = 'PermRead' in params ? params.PermRead : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.PermType = 'PermType' in params ? params.PermType : null;

        if (params.DetailedPerms) {
            this.DetailedPerms = new Array();
            for (let z in params.DetailedPerms) {
                let obj = new DetailedRolePerm();
                obj.deserialize(params.DetailedPerms[z]);
                this.DetailedPerms.push(obj);
            }
        }

    }
}

/**
 * DeleteConsumerGroup response structure.
 * @class
 */
class DeleteConsumerGroupResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Access point information.
 * @class
 */
class Endpoint extends  AbstractModel {
    constructor(){
        super();

        /**
         * Access point type, with the enumerated values as follows:.

- VPC: specifies the VPC network.

-PUBLIC: public network.

-INTERNAL: specifies the support network.
         * @type {string || null}
         */
        this.Type = null;

        /**
         * Status.
OPEN: indicates to start or activate a function.
CLOSE: indicates the closed state.
PROCESSING: operation in progress.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Payment type, only public network.
PREPAID: annual/monthly package.
Pay-As-You-Go.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PayMode = null;

        /**
         * Access point address.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EndpointUrl = null;

        /**
         * VPC ID
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Specifies the subnet ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SubnetId = null;

        /**
         * Public network bandwidth, in Mbps

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Bandwidth = null;

        /**
         * Public network access rules

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<IpRule> || null}
         */
        this.IpRules = null;

        /**
         * Whether the public network is billed by traffic.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.BillingFlow = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Type = 'Type' in params ? params.Type : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.PayMode = 'PayMode' in params ? params.PayMode : null;
        this.EndpointUrl = 'EndpointUrl' in params ? params.EndpointUrl : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.SubnetId = 'SubnetId' in params ? params.SubnetId : null;
        this.Bandwidth = 'Bandwidth' in params ? params.Bandwidth : null;

        if (params.IpRules) {
            this.IpRules = new Array();
            for (let z in params.IpRules) {
                let obj = new IpRule();
                obj.deserialize(params.IpRules[z]);
                this.IpRules.push(obj);
            }
        }
        this.BillingFlow = 'BillingFlow' in params ? params.BillingFlow : null;

    }
}

/**
 * Message log
 * @class
 */
class MessageItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Message ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.MsgId = null;

        /**
         * Message tag

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Tags = null;

        /**
         * Message key.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Keys = null;

        /**
         * Client address.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProducerAddr = null;

        /**
         * Message Sending Time	
	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProduceTime = null;

        /**
         * Dead-letter resend count	
	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DeadLetterResendTimes = null;

        /**
         * Dead Letter Resend Success Count

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.DeadLetterResendSuccessTimes = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MsgId = 'MsgId' in params ? params.MsgId : null;
        this.Tags = 'Tags' in params ? params.Tags : null;
        this.Keys = 'Keys' in params ? params.Keys : null;
        this.ProducerAddr = 'ProducerAddr' in params ? params.ProducerAddr : null;
        this.ProduceTime = 'ProduceTime' in params ? params.ProduceTime : null;
        this.DeadLetterResendTimes = 'DeadLetterResendTimes' in params ? params.DeadLetterResendTimes : null;
        this.DeadLetterResendSuccessTimes = 'DeadLetterResendSuccessTimes' in params ? params.DeadLetterResendSuccessTimes : null;

    }
}

/**
 * Role information.
 * @class
 */
class RoleItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * Role name.
         * @type {string || null}
         */
        this.RoleName = null;

        /**
         * Whether to enable consumption.
         * @type {boolean || null}
         */
        this.PermRead = null;

        /**
         * Whether to enable production
         * @type {boolean || null}
         */
        this.PermWrite = null;

        /**
         * Access Key
         * @type {string || null}
         */
        this.AccessKey = null;

        /**
         * Secret Key
         * @type {string || null}
         */
        this.SecretKey = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

        /**
         * Role creation time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.CreatedTime = null;

        /**
         * Role update time. **It is a Unix timestamp (ms).**
         * @type {number || null}
         */
        this.ModifiedTime = null;

        /**
         * Specifies the types of permissions. the default is to authorize by Cluster (Cluster: at the Cluster level; TopicAndGroup: topic and consumer group level).
         * @type {string || null}
         */
        this.PermType = null;

        /**
         * Permission configuration in Topic and Group dimension.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DetailedRolePerm> || null}
         */
        this.DetailedRolePerms = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoleName = 'RoleName' in params ? params.RoleName : null;
        this.PermRead = 'PermRead' in params ? params.PermRead : null;
        this.PermWrite = 'PermWrite' in params ? params.PermWrite : null;
        this.AccessKey = 'AccessKey' in params ? params.AccessKey : null;
        this.SecretKey = 'SecretKey' in params ? params.SecretKey : null;
        this.Remark = 'Remark' in params ? params.Remark : null;
        this.CreatedTime = 'CreatedTime' in params ? params.CreatedTime : null;
        this.ModifiedTime = 'ModifiedTime' in params ? params.ModifiedTime : null;
        this.PermType = 'PermType' in params ? params.PermType : null;

        if (params.DetailedRolePerms) {
            this.DetailedRolePerms = new Array();
            for (let z in params.DetailedRolePerms) {
                let obj = new DetailedRolePerm();
                obj.deserialize(params.DetailedRolePerms[z]);
                this.DetailedRolePerms.push(obj);
            }
        }

    }
}

/**
 * Tag filter
 * @class
 */
class TagFilter extends  AbstractModel {
    constructor(){
        super();

        /**
         * Tag key name
         * @type {string || null}
         */
        this.TagKey = null;

        /**
         * Tag value list
         * @type {Array.<string> || null}
         */
        this.TagValues = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.TagKey = 'TagKey' in params ? params.TagKey : null;
        this.TagValues = 'TagValues' in params ? params.TagValues : null;

    }
}

/**
 * Price tag information. A complete price tag includes the billing category and the billing item.
 * @class
 */
class PriceTag extends  AbstractModel {
    constructor(){
        super();

        /**
         * Price name. Enumeration values: tps: basic price of TPS; stepTps: TPS step size.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Step size corresponding to the billing item.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Step = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.Step = 'Step' in params ? params.Step : null;

    }
}

/**
 * Producer information.
 * @class
 */
class ProducerInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Client ID	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClientId = null;

        /**
         * Client IP.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClientIp = null;

        /**
         * Client language. 
- JAVA((byte) 0)
- CPP((byte) 1) 
- DOTNET((byte) 2) 
- PYTHON((byte) 3)
- DELPHI((byte) 4)
- ERLANG((byte) 5)
- RUBY((byte) 6)
- OTHER((byte) 7)
- HTTP((byte) 8)
- GO((byte) 9)
- PHP((byte) 10)
- OMS((byte) 11)
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Language = null;

        /**
         * Client version.	
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Version = null;

        /**
         * Last production time, **Unix timestamp (seconds)**.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.LastUpdateTimestamp = null;

        /**
         * Producer client protocol type. valid values: the following.

-Specifies the grpc protocol.
-remoting protocol.
-http protocol.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ChannelProtocol = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ClientId = 'ClientId' in params ? params.ClientId : null;
        this.ClientIp = 'ClientIp' in params ? params.ClientIp : null;
        this.Language = 'Language' in params ? params.Language : null;
        this.Version = 'Version' in params ? params.Version : null;
        this.LastUpdateTimestamp = 'LastUpdateTimestamp' in params ? params.LastUpdateTimestamp : null;
        this.ChannelProtocol = 'ChannelProtocol' in params ? params.ChannelProtocol : null;

    }
}

/**
 * DeleteTopic response structure.
 * @class
 */
class DeleteTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyInstanceEndpoint response structure.
 * @class
 */
class ModifyInstanceEndpointResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeInstance request structure.
 * @class
 */
class DescribeInstanceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;

    }
}

/**
 * DescribeProductSKUs response structure.
 * @class
 */
class DescribeProductSKUsResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Product configuration information

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ProductSKU> || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.Data) {
            this.Data = new Array();
            for (let z in params.Data) {
                let obj = new ProductSKU();
                obj.deserialize(params.Data[z]);
                this.Data.push(obj);
            }
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * RemoveMigratingTopic response structure.
 * @class
 */
class RemoveMigratingTopicResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * IP rules
 * @class
 */
class IpRule extends  AbstractModel {
    constructor(){
        super();

        /**
         * Specifies the IP address.
         * @type {string || null}
         */
        this.Ip = null;

        /**
         * Whether the IP address is allowed. Default value: false, indicating that the IP address is denied.
         * @type {boolean || null}
         */
        this.Allow = null;

        /**
         * Remarks
         * @type {string || null}
         */
        this.Remark = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Ip = 'Ip' in params ? params.Ip : null;
        this.Allow = 'Allow' in params ? params.Allow : null;
        this.Remark = 'Remark' in params ? params.Remark : null;

    }
}

/**
 * ResetConsumerGroupOffset request structure.
 * @class
 */
class ResetConsumerGroupOffsetRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * TDMQ RocketMQ instance ID. It can be obtained from the API [DescribeFusionInstanceList](https://www.tencentcloud.comom/document/api/1493/106745?from_cn_redirect=1) or the console.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Topic name. It can be obtained from [TopicItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#TopicItem) returned by the API [DescribeTopicList](https://www.tencentcloud.comom/document/api/1493/96030?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.Topic = null;

        /**
         * Timestamp (unit: millisecond) for resetting the offset. The value -1 indicates resetting to the latest offset.
         * @type {number || null}
         */
        this.ResetTimestamp = null;

        /**
         * Consumer group name. It can be obtained from [ConsumeGroupItem](https://www.tencentcloud.comom/document/api/1493/96031?from_cn_redirect=1#ConsumeGroupItem) returned by the API [DescribeConsumerGroupList](https://www.tencentcloud.comom/document/api/1493/101535?from_cn_redirect=1) or from the console.
         * @type {string || null}
         */
        this.ConsumerGroup = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.Topic = 'Topic' in params ? params.Topic : null;
        this.ResetTimestamp = 'ResetTimestamp' in params ? params.ResetTimestamp : null;
        this.ConsumerGroup = 'ConsumerGroup' in params ? params.ConsumerGroup : null;

    }
}

module.exports = {
    DetailedRolePerm: DetailedRolePerm,
    DescribeProductSKUsRequest: DescribeProductSKUsRequest,
    ResetConsumerGroupOffsetResponse: ResetConsumerGroupOffsetResponse,
    DescribeSmoothMigrationTaskListRequest: DescribeSmoothMigrationTaskListRequest,
    ProductSKU: ProductSKU,
    DescribeRoleListResponse: DescribeRoleListResponse,
    CreateInstanceResponse: CreateInstanceResponse,
    DescribeConsumerClientResponse: DescribeConsumerClientResponse,
    DescribeMessageListRequest: DescribeMessageListRequest,
    ModifyInstanceRequest: ModifyInstanceRequest,
    FusionInstanceItem: FusionInstanceItem,
    InstanceItemExtraInfo: InstanceItemExtraInfo,
    DescribeConsumerGroupResponse: DescribeConsumerGroupResponse,
    DeleteTopicRequest: DeleteTopicRequest,
    DescribeSmoothMigrationTaskListResponse: DescribeSmoothMigrationTaskListResponse,
    DescribeMigrationTaskListResponse: DescribeMigrationTaskListResponse,
    VpcInfo: VpcInfo,
    DescribeRoleListRequest: DescribeRoleListRequest,
    DescribeMigratingTopicStatsResponse: DescribeMigratingTopicStatsResponse,
    DescribeConsumerLagRequest: DescribeConsumerLagRequest,
    DescribeMigratingGroupStatsRequest: DescribeMigratingGroupStatsRequest,
    Tag: Tag,
    DescribeSourceClusterGroupListResponse: DescribeSourceClusterGroupListResponse,
    DescribeMessageListResponse: DescribeMessageListResponse,
    DeleteSmoothMigrationTaskRequest: DeleteSmoothMigrationTaskRequest,
    DescribeInstanceListResponse: DescribeInstanceListResponse,
    DescribeConsumerClientListResponse: DescribeConsumerClientListResponse,
    ModifyInstanceResponse: ModifyInstanceResponse,
    CreateConsumerGroupRequest: CreateConsumerGroupRequest,
    ClientSubscriptionInfo: ClientSubscriptionInfo,
    ChangeMigratingTopicToNextStageResponse: ChangeMigratingTopicToNextStageResponse,
    DescribeSourceClusterGroupListRequest: DescribeSourceClusterGroupListRequest,
    DescribeInstanceListRequest: DescribeInstanceListRequest,
    DescribeMigrationTaskListRequest: DescribeMigrationTaskListRequest,
    ModifyRoleResponse: ModifyRoleResponse,
    TopicStageChangeResult: TopicStageChangeResult,
    DeleteInstanceResponse: DeleteInstanceResponse,
    DescribeTopicResponse: DescribeTopicResponse,
    SmoothMigrationTaskItem: SmoothMigrationTaskItem,
    ModifyRoleRequest: ModifyRoleRequest,
    DescribeFusionInstanceListResponse: DescribeFusionInstanceListResponse,
    ResendDeadLetterMessageResponse: ResendDeadLetterMessageResponse,
    DescribeMessageRequest: DescribeMessageRequest,
    DeleteRoleRequest: DeleteRoleRequest,
    TopicConsumeStats: TopicConsumeStats,
    DescribeMigratingTopicStatsRequest: DescribeMigratingTopicStatsRequest,
    DeleteConsumerGroupRequest: DeleteConsumerGroupRequest,
    CreateConsumerGroupResponse: CreateConsumerGroupResponse,
    RollbackMigratingTopicStageRequest: RollbackMigratingTopicStageRequest,
    DescribeTopicListByGroupResponse: DescribeTopicListByGroupResponse,
    DescribeMessageTraceResponse: DescribeMessageTraceResponse,
    DoHealthCheckOnMigratingTopicRequest: DoHealthCheckOnMigratingTopicRequest,
    DescribeProducerListRequest: DescribeProducerListRequest,
    DescribeMigratingTopicListResponse: DescribeMigratingTopicListResponse,
    InstanceItem: InstanceItem,
    DescribeTopicRequest: DescribeTopicRequest,
    DescribeMessageTraceRequest: DescribeMessageTraceRequest,
    DeleteSmoothMigrationTaskResponse: DeleteSmoothMigrationTaskResponse,
    DescribeMigratingGroupStatsResponse: DescribeMigratingGroupStatsResponse,
    RemoveMigratingTopicRequest: RemoveMigratingTopicRequest,
    DescribeMessageResponse: DescribeMessageResponse,
    ZoneScheduledItem: ZoneScheduledItem,
    DescribeTopicListRequest: DescribeTopicListRequest,
    ModifyConsumerGroupRequest: ModifyConsumerGroupRequest,
    DescribeConsumerGroupRequest: DescribeConsumerGroupRequest,
    MigrationTaskItem: MigrationTaskItem,
    TopicItem: TopicItem,
    SubscriptionData: SubscriptionData,
    CreateInstanceRequest: CreateInstanceRequest,
    ConsumerClient: ConsumerClient,
    MessageTraceItem: MessageTraceItem,
    DescribeConsumerClientRequest: DescribeConsumerClientRequest,
    ModifyTopicResponse: ModifyTopicResponse,
    DescribeConsumerLagResponse: DescribeConsumerLagResponse,
    ChangeMigratingTopicToNextStageRequest: ChangeMigratingTopicToNextStageRequest,
    DeleteRoleResponse: DeleteRoleResponse,
    DescribeTopicListByGroupRequest: DescribeTopicListByGroupRequest,
    DescribeMigratingTopicListRequest: DescribeMigratingTopicListRequest,
    Filter: Filter,
    ModifyTopicRequest: ModifyTopicRequest,
    DescribeInstanceResponse: DescribeInstanceResponse,
    ModifyConsumerGroupResponse: ModifyConsumerGroupResponse,
    DeleteInstanceRequest: DeleteInstanceRequest,
    MessageTrackItem: MessageTrackItem,
    DescribeProducerListResponse: DescribeProducerListResponse,
    ResendDeadLetterMessageRequest: ResendDeadLetterMessageRequest,
    RollbackMigratingTopicStageResponse: RollbackMigratingTopicStageResponse,
    DescribeFusionInstanceListRequest: DescribeFusionInstanceListRequest,
    DoHealthCheckOnMigratingTopicResponse: DoHealthCheckOnMigratingTopicResponse,
    CreateRoleResponse: CreateRoleResponse,
    ModifyInstanceEndpointRequest: ModifyInstanceEndpointRequest,
    SourceClusterGroupConfig: SourceClusterGroupConfig,
    DescribeTopicListResponse: DescribeTopicListResponse,
    DescribeConsumerClientListRequest: DescribeConsumerClientListRequest,
    MigratingTopic: MigratingTopic,
    CreateRoleRequest: CreateRoleRequest,
    DeleteConsumerGroupResponse: DeleteConsumerGroupResponse,
    Endpoint: Endpoint,
    MessageItem: MessageItem,
    RoleItem: RoleItem,
    TagFilter: TagFilter,
    PriceTag: PriceTag,
    ProducerInfo: ProducerInfo,
    DeleteTopicResponse: DeleteTopicResponse,
    ModifyInstanceEndpointResponse: ModifyInstanceEndpointResponse,
    DescribeInstanceRequest: DescribeInstanceRequest,
    DescribeProductSKUsResponse: DescribeProductSKUsResponse,
    RemoveMigratingTopicResponse: RemoveMigratingTopicResponse,
    IpRule: IpRule,
    ResetConsumerGroupOffsetRequest: ResetConsumerGroupOffsetRequest,

}
